	# coding: utf-8
from flask import request
from flask_apscheduler import APScheduler
from flask_cors import CORS

from air_web.web_flask import create_app
from air_web.web_flask.bll.model_map import ModelMap
from air_web.web_flask.tools.air_condition_show import (
    SichuanData,
    sichuan_big_main_yesterday,
    judge_sichuan
)
from air_web.web_flask.urls import register_urls
from air_web.dw.dws_finish_time import proc_finish_time
from air_web.dw.max_p_total_access import max_p_total_access

# from air_web.web_flask.tools.dws import stats

# 创建Flask应用
app = create_app()
# 配置CORS扩展，允许所有来源的请求，并支持凭证传输
CORS(
    app,
    allow_headers="*",
    supports_credentials=True,
    resources={r"/*": {"origins": "*"}},
)
# 统一在app上注册路由
register_urls(app)

# 定义一个在每个请求之间运行的函数
@app.before_request
# 处理请求参数
def args_handle():
    # 获取请求参数
    type_code = request.args.get("type_code")
    # 如果type_code存在，则使用ModelMap替换它并更新请求对象的参数
    if type_code:
        args_dict = dict(request.args)
        args_dict["type_code"] = ModelMap.get("type_code", type_code)
        request.args = args_dict

# 设置定时任务
# 定义函数设置定时任务
def __task():
    # 如果judge_sichuan()返回False，则直接返回，不执行后续的定时任务设置
    if not judge_sichuan():
        return
    # 使用 APScheduler 初始化并添加多个定时任务：
    scheduler = APScheduler()
    scheduler.init_app(app)
    # 每 15 分钟执行一次
    scheduler.add_job(
        func=SichuanData().sichuan_rt_main,
        trigger="cron",
        minute="0,15,30,45",
        id="rt_data",
    )
    # 在每天早上 6:55 执行
    scheduler.add_job(
        func=sichuan_big_main_yesterday, trigger="cron", hour=6, minute=55, id="yesterday_kt"
    )
    # 每 15 分钟执行一次
    scheduler.add_job(
        func=SichuanData().zb_rt_main,  trigger="cron", minute="0,15,30,45", id="zb_rt"
    )
    # 在每天凌晨 1:50 执行
    scheduler.add_job(
        func=SichuanData().zb_yesterday_main, trigger="cron", hour=1, minute=50, id="zb_yesterday"
    )
    # 在每天晚上 10:10 执行
    scheduler.add_job(
        func=SichuanData().zb_tomorrow_main, trigger="cron", hour=22, minute=10, id="zb_tomorrow"
    )
    # 每分钟执行一次
    scheduler.add_job(func=proc_finish_time, trigger='interval', minutes=1, id="dws_finish_time")
    # 在每天晚上 11:50 执行
    #scheduler.add_job(func=max_p_total_access, trigger='cron', hour=23, minute=50,
                      #id="max_p_total_access")
    scheduler.start()


__task()

# 确保当此脚本作为主程序运行时才执行以下代码
if __name__ == "__main__":
    # 运行 Flask 应用，监听所有 IP 地址上的 18008 端口
    app.run(host="0.0.0.0", port=18008)
